package admin

import (
	"context"
	"crypto/md5"
	"encoding/hex"
	"kstar-gf-api/internal/dao"
	"kstar-gf-api/internal/model/entity"
	"kstar-gf-api/internal/service"

	"github.com/gogf/gf/v2/container/gmap"
)

type sAdmin struct{}

func init() {
	service.RegisterAdmin(New())
}

func New() *sAdmin {
	return &sAdmin{}
}

// 获取管理员列表
func (s *sAdmin) GetAdminList(ctx context.Context, page int, pageSize int) (list []*entity.SysAdmin, count int, err error) {
	count = 0
	list = make([]*entity.SysAdmin, 0)

	where := gmap.New()

	err = dao.SysAdmin.Ctx(ctx).Where(where).OrderDesc(dao.SysAdmin.Columns().UserId).Page(page, pageSize).ScanAndCount(&list, &count, true)

	if err != nil {
		return
	}

	return
}

// 根据手机号获取管理员信息
func (s *sAdmin) GetAdminInfoByPhone(ctx context.Context, userPhone string) (info *entity.SysAdmin, err error) {
	err = dao.SysAdmin.Ctx(ctx).Where(dao.SysAdmin.Columns().UserPhone, userPhone).Scan(&info)

	return
}

// 对密码进行标准的MD5加密并返回常见的32位小写字符串
func (s *sAdmin) EncryptPassword(password string) string {
	hash := md5.Sum([]byte(password))  // 生成MD5哈希值
	return hex.EncodeToString(hash[:]) // 转换为16进制字符串
}

// 验证输入的密码和存储的密码是否匹配
func (s *sAdmin) VerifyPassword(inputPassword, storedPassword string) bool {
	// 将输入密码加密
	encryptedPassword := s.EncryptPassword(inputPassword)
	// 与存储的密码进行比较
	return encryptedPassword == storedPassword
}
